package sdk

import (
	"fmt"
	"peilian-api/app/global/variable"

	mailer "gopkg.in/gomail.v2"
)

const (
	UserLogin      = "【MetaGC·有时】产品服务已经开通"
	UserRepassword = "【MetaGC·有时】账号密码找回"
	SendCode       = "【MetaGC·有时】验证码"
	MailBinding    = "【MetaGC·有时】邮箱绑定验证码"
	MailFindCode   = "【MetaGC·有时】找回密码验证码"

	MsgTypePassword        = 1
	MsgTypeRepassword      = 2
	MsgTypeCode            = 3
	MsgTypeMailBindingCode = 4
	MsgTypeMailFindCode    = 5
)

type MailInfo struct {
	MailTo      string
	RealName    string
	AccountName string
	Password    string
	Code        string
}

func sendMail(mailFrom string, mailTo string, subject string, content string) error {
	msg := mailer.NewMessage()
	msg.SetHeader("From", mailFrom)
	msg.SetHeader("To", mailTo)
	msg.SetHeader("Subject", subject)
	msg.SetBody("text/html", content)
	dialer := mailer.NewDialer(variable.Config.MailInfo.AuthUrl, variable.Config.MailInfo.AuthPort, variable.Config.MailInfo.BusinessMail, variable.Config.MailInfo.BusinessPassword)
	// 发送邮件，连接邮件服务器，发送完就关闭
	err := dialer.DialAndSend(msg)
	return err
}

// 给用户分配账户+密码
func SendMailInfo(isRetrieve uint, mailFrom string, mailInfo MailInfo) error {
	title, content := getUserLoginContent(isRetrieve, mailInfo)
	err := sendMail(mailFrom, mailInfo.MailTo, title, content)
	fmt.Printf("SendMailInfo result ===>%+v\n", err)
	return err
}

func getUserLoginContent(isRetrieve uint, mailInfo MailInfo) (string, string) {
	if isRetrieve == MsgTypePassword {
		return UserLogin, fmt.Sprintf("尊敬的【%s】:<br/><br/><p>您的产品账户已经建立，账户名称为【%s】,初始密码为：%s</p><br><br><p>您可以登录%s，使用我们的产品服务。</p><br/><p>感谢您的支持！</p>", mailInfo.RealName, mailInfo.AccountName, mailInfo.Password, variable.Config.App.Domain)
	} else if isRetrieve == MsgTypeRepassword {
		return UserRepassword, fmt.Sprintf("尊敬的【%s】:<br/><br/><p>您的产品账户已经找回，账户名称为【%s】,初始密码为：%s</p><br><br><p>您可以登录%s，使用我们的产品服务。</p><br/><p>为保证账号安全，请勿泄漏此验证码。</p><br/><p> 祝您生活愉快！</p>", mailInfo.RealName, mailInfo.AccountName, mailInfo.Password, variable.Config.App.Domain)
	} else if isRetrieve == MsgTypeMailBindingCode {
		return SendCode, fmt.Sprintf("尊敬的【MetaGC·有时】用户:<br/><br/><p>您正在有时进行邮箱绑定的操作，本次请求的邮件验证码是【%s】(为了保证您账号的安全性，请您在10分钟内完成验证)。</p><p>保证账号安全，请勿泄漏此验证码。</p><br/><p> 祝您生活愉快！</p>", mailInfo.Code)
	} else if isRetrieve == MsgTypeMailFindCode {
		return SendCode, fmt.Sprintf("尊敬的【MetaGC·有时】用户:<br/><br/><p>您正在有时进行找回密码的操作，本次请求的邮件验证码是【%s】(为了保证您账号的安全性，请您在10分钟内完成验证)。</p><p>保证账号安全，请勿泄漏此验证码。</p><br/><p> 祝您生活愉快！</p>", mailInfo.Code)
	} else {
		return SendCode, fmt.Sprintf("尊敬的【MetaGC·有时】用户:<br/><br/><p>您的验证码是【%s】,验证码有效期为10分钟,请勿泄漏。</p><br><br/><p>感谢您的支持！</p>", mailInfo.Code)
	}
	// password := fmt.Sprintf("%06v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(1000000))

}
